﻿// demo01.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
//          提取  osquery  中的代码：
//          获取  注册表   信息

using namespace std;

#include <set>
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <map>
#include <string>
#include <Windows.h>

#include <boost/algorithm/string.hpp>
#include <boost/range/adaptor/map.hpp>
#include <boost/range/algorithm.hpp>

#include <boost/utility/enable_if.hpp>
#include <boost/type_traits.hpp>
#include <boost/detail/lightweight_test.hpp>

using boost::enable_if;
using boost::disable_if;
using boost::is_arithmetic;

struct container {
    bool my_value;

    template <class T>
    container(const T&, const typename boost::enable_if<boost::is_arithmetic<T>, T>::type* = 0) :
        my_value(true) {}

    template <class T>
    container(const T&, const typename boost::disable_if<boost::is_arithmetic<T>, T>::type* = 0) :
        my_value(false) {}
};

// example from Howard Hinnant (tests enable_if template members of a templated class)
template <class charT>
struct xstring
{
    template <class It>
    xstring(It begin, It end, typename boost::disable_if<boost::is_arithmetic<It> >::type* = 0)
        : data(end - begin) {}

    int data;
};


int main()
{
    BOOST_TEST(container(1).my_value);
    BOOST_TEST(container(1.0).my_value);

    BOOST_TEST(!container("1").my_value);
    BOOST_TEST(!container(static_cast<void*>(0)).my_value);

    char sa[] = "123456";
    BOOST_TEST(xstring<char>(sa, sa + 6).data == 6);


    return boost::report_errors();
}